package cn.hchaojie.javase.day11;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.junit.Test;

public class TestMap {
	private static final Map<Integer, String> WEEK_DAY_NAMES = new HashMap<>();
	
	// 静态初始化块，类被虚拟机加载的时候就会被执行
	static {
		WEEK_DAY_NAMES.put(1, "星期一");
		WEEK_DAY_NAMES.put(2, "星期二");
		WEEK_DAY_NAMES.put(3, "星期三");
		WEEK_DAY_NAMES.put(4, "星期四");
		WEEK_DAY_NAMES.put(5, "星期五");
		WEEK_DAY_NAMES.put(6, "星期六");
		WEEK_DAY_NAMES.put(7, "星期天");
	}
	
	@Test
	public void test() {
		// getWeekDayName(1) ==> 星期一
		assertEquals("星期一", getWeekDayName(1));
		assertEquals("星期天", getWeekDayName(7));
		assertNull(getWeekDayName(8));
	}
	
	// 写一个方法，给定一个天数[1,2,…,7]，返回对应的[星期一,星期二,…,星期日] 
	/**
	 * 
	 * @param num  - [1,7]之间的一个数字
	 * @return 	- 返回对应的[星期一,星期天]之间的字符串
	 */
	public static String getWeekDayName(int num) {
//		if (num > 7 || num < 1) {
//			return null;
//		}
//		
//		String[] array = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"};
//		
//		return array[num - 1];
		
		// List<String> 
//		Map<Integer, String> map = new HashMap<>();
//		
//		// key, value  键值对
//		map.put(1, "星期一");
//		map.put(2, "星期二");
//		map.put(3, "星期三");
//		map.put(4, "星期四");
//		map.put(5, "星期五");
//		map.put(6, "星期六");
//		map.put(7, "星期天");
		
		return WEEK_DAY_NAMES.get(num);
	}
	
	
	// map里面元素是成对放进去的
	// 1 - > 星期一
	// 2 - > 星期二
	@Test
	public void test1() {
		// List<String> 
		Map<Integer, String> map = new HashMap<>();
		
		// key, value  键值对
		map.put(1, "星期一");
		map.put(2, "星期二");
		map.put(7, "星期天");
		
		System.out.println(map.get(7));
	}
	
	// 遍历map集合
	@Test
	public void test2() {
		// List<String> 
		Map<Integer, String> map = new HashMap<>();
		
		// key, value  键值对
		map.put(1, "星期一");
		map.put(2, "星期二");
		map.put(7, "星期天");
		
		// map.entrySet();	// 返回map里面的所有元素
		
		// Entry: 代表了键值对 key-value的一个组合
//		Set<Entry<Integer, String>> elements = map.entrySet();
//		for (Entry entry : elements) {
//			System.out.println("key: " + entry.getKey() + " value:" + entry.getValue());
//		}
		
		for (Entry<Integer, String> entry : map.entrySet()) {
			System.out.println("key: " + entry.getKey() + " value:" + entry.getValue());
		}
		
		// map.keySet();  一次性把所有的key取出来
		// Set<Integer> keys = map.keySet();
		for (Integer key : map.keySet()) {
			System.out.println("key : " + key + " value:" + map.get(key));
		}
	}
	
	@Test
	public void test4() {
		String s1 = "a, b";
		String s2 = "";			// 空字符串
		System.out.println(s2.length());
		
		String[] split = s1.split(" ,");
		System.out.println(Arrays.toString(split));
	}
	
	@Test
	public void test5() {
		Map<String, Integer> map = new HashMap<>();
		
		System.out.println("java".hashCode());
		System.out.println("c++".hashCode());
		System.out.println("python".hashCode());
		
		int h1 = "java".hashCode();
		int h2 = "c++".hashCode();
		int h3 = "python".hashCode();
		int h4 = "swift".hashCode();
		
		// (h = key.hashCode()) ^ (h >>> 16)
		int index1 = (h1 ^ (h1 >>> 16)) & 15;
		int index2 = (h2 ^ (h2 >>> 16)) & 15;
		int index3 = (h3 ^ (h3 >>> 16)) & 15;
		int index4 = (h4 ^ (h4 >>> 16)) & 15;
		
		System.out.println(index1);
		System.out.println(index2);
		System.out.println(index3);
		System.out.println(index4);
		
		map.put("java", 5);
		map.put("c++", 3);
		map.put("python", 7);
		map.put("swift", 8);
//		
		System.out.println(map.get("java"));
//		System.out.println(map.get("python"));
	}
}
